import java.util.ArrayList;
import java.util.List;

import junit.framework.TestCase;

/**
 * 
 * @author Claudio Trindade
 *
 */
public class JogoTesteCaixaPreta_Claudio extends TestCase {

	public void testDeterminaOrdem_T1() {
		Jogo jogo = new Jogo ();
		Jogador jogador1 = new Jogador();
		jogador1.setIdade(1);
		Jogador jogador2 = new Jogador();
		jogador2.setIdade(2);
		List<Jogador> jogadores = new ArrayList<Jogador>();
		jogadores.add(jogador1);
		jogadores.add(jogador2);
		jogo.setJogadores(jogadores);
		jogo.setSentidoDoJogo(Sentido.HORARIO);
		
		jogo.determinaOrdem();
		
		assertEquals(jogador1, jogo.getJogadorAtual());
		assertEquals(jogador2, jogo.getProximoJogador());
	}
	
	public void testDeterminaOrdem_T2() {
		Jogo jogo = new Jogo ();
		Jogador jogador1 = new Jogador();
		jogador1.setIdade(2);
		Jogador jogador2 = new Jogador();
		jogador2.setIdade(1);
		List<Jogador> jogadores = new ArrayList<Jogador>();
		jogadores.add(jogador1);
		jogadores.add(jogador2);
		jogo.setJogadores(jogadores);
		jogo.setSentidoDoJogo(Sentido.ANTIHORARIO);
		
		jogo.determinaOrdem();
		
		assertEquals(jogador2, jogo.getJogadorAtual());
		assertEquals(jogador1, jogo.getProximoJogador());
	}
	
	public void testDeterminaOrdem_T3() {
		Jogo jogo = new Jogo ();
		Jogador jogador1 = new Jogador();
		jogador1.setIdade(1);
		Jogador jogador2 = new Jogador();
		jogador2.setIdade(1);
		List<Jogador> jogadores = new ArrayList<Jogador>();
		jogadores.add(jogador1);
		jogadores.add(jogador2);
		jogo.setJogadores(jogadores);
		jogo.setSentidoDoJogo(Sentido.HORARIO);
		
		jogo.determinaOrdem();
		
		assertEquals(jogador1, jogo.getJogadorAtual());
		assertEquals(jogador2, jogo.getProximoJogador());
	}
	
	public void testDeterminaOrdem_T4() {
		Jogo jogo = new Jogo ();
		Jogador jogador1 = new Jogador();
		jogador1.setIdade(1);
		Jogador jogador2 = new Jogador();
		jogador2.setIdade(2);
		Jogador jogador3 = new Jogador();
		jogador3.setIdade(3);
		List<Jogador> jogadores = new ArrayList<Jogador>();
		jogadores.add(jogador1);
		jogadores.add(jogador2);
		jogadores.add(jogador3);
		jogo.setJogadores(jogadores);
		jogo.setSentidoDoJogo(Sentido.ANTIHORARIO);
		
		jogo.determinaOrdem();
		
		assertEquals(jogador1, jogo.getJogadorAtual());
		assertEquals(jogador3, jogo.getProximoJogador());
	}
	
	public void testDeterminaOrdem_T5() {
		Jogo jogo = new Jogo ();
		Jogador jogador1 = new Jogador();
		jogador1.setIdade(3);
		Jogador jogador2 = new Jogador();
		jogador2.setIdade(2);
		Jogador jogador3 = new Jogador();
		jogador3.setIdade(1);
		List<Jogador> jogadores = new ArrayList<Jogador>();
		jogadores.add(jogador1);
		jogadores.add(jogador2);
		jogadores.add(jogador3);
		jogo.setJogadores(jogadores);
		jogo.setSentidoDoJogo(Sentido.HORARIO);
		
		jogo.determinaOrdem();
		
		assertEquals(jogador3, jogo.getJogadorAtual());
		assertEquals(jogador1, jogo.getProximoJogador());
	}
	
	public void testDeterminaOrdem_T6() {
		Jogo jogo = new Jogo ();
		Jogador jogador1 = new Jogador();
		jogador1.setIdade(1);
		Jogador jogador2 = new Jogador();
		jogador2.setIdade(1);
		Jogador jogador3 = new Jogador();
		jogador3.setIdade(2);
		List<Jogador> jogadores = new ArrayList<Jogador>();
		jogadores.add(jogador1);
		jogadores.add(jogador2);
		jogadores.add(jogador3);
		jogo.setJogadores(jogadores);
		jogo.setSentidoDoJogo(Sentido.ANTIHORARIO);
		
		jogo.determinaOrdem();
		
		assertEquals(jogador1, jogo.getJogadorAtual());
		assertEquals(jogador3, jogo.getProximoJogador());
	}
	
	public void testDeterminaOrdem_T7() {
		Jogo jogo = new Jogo ();
		Jogador jogador1 = new Jogador();
		jogador1.setIdade(1);
		Jogador jogador2 = new Jogador();
		jogador2.setIdade(2);
		Jogador jogador3 = new Jogador();
		jogador3.setIdade(3);
		Jogador jogador4 = new Jogador();
		jogador4.setIdade(4);
		Jogador jogador5 = new Jogador();
		jogador5.setIdade(5);
		Jogador jogador6 = new Jogador();
		jogador6.setIdade(6);
		Jogador jogador7 = new Jogador();
		jogador7.setIdade(7);
		List<Jogador> jogadores = new ArrayList<Jogador>();
		jogadores.add(jogador1);
		jogadores.add(jogador2);
		jogadores.add(jogador3);
		jogadores.add(jogador4);
		jogadores.add(jogador5);
		jogadores.add(jogador6);
		jogadores.add(jogador7);
		jogo.setJogadores(jogadores);
		jogo.setSentidoDoJogo(Sentido.HORARIO);
		
		jogo.determinaOrdem();
		
		assertEquals(jogador1, jogo.getJogadorAtual());
		assertEquals(jogador2, jogo.getProximoJogador());
	}
	
	public void testDeterminaOrdem_T8() {
		Jogo jogo = new Jogo ();
		Jogador jogador1 = new Jogador();
		jogador1.setIdade(7);
		Jogador jogador2 = new Jogador();
		jogador2.setIdade(6);
		Jogador jogador3 = new Jogador();
		jogador3.setIdade(5);
		Jogador jogador4 = new Jogador();
		jogador4.setIdade(4);
		Jogador jogador5 = new Jogador();
		jogador5.setIdade(3);
		Jogador jogador6 = new Jogador();
		jogador6.setIdade(2);
		Jogador jogador7 = new Jogador();
		jogador7.setIdade(1);
		List<Jogador> jogadores = new ArrayList<Jogador>();
		jogadores.add(jogador1);
		jogadores.add(jogador2);
		jogadores.add(jogador3);
		jogadores.add(jogador4);
		jogadores.add(jogador5);
		jogadores.add(jogador6);
		jogadores.add(jogador7);
		jogo.setJogadores(jogadores);
		jogo.setSentidoDoJogo(Sentido.ANTIHORARIO);
		
		jogo.determinaOrdem();
		
		assertEquals(jogador7, jogo.getJogadorAtual());
		assertEquals(jogador6, jogo.getProximoJogador());
	}
	
	public void testDeterminaOrdem_T9() {
		Jogo jogo = new Jogo ();
		Jogador jogador1 = new Jogador();
		jogador1.setIdade(7);
		Jogador jogador2 = new Jogador();
		jogador2.setIdade(6);
		Jogador jogador3 = new Jogador();
		jogador3.setIdade(5);
		Jogador jogador4 = new Jogador();
		jogador4.setIdade(4);
		Jogador jogador5 = new Jogador();
		jogador5.setIdade(3);
		Jogador jogador6 = new Jogador();
		jogador6.setIdade(1);
		Jogador jogador7 = new Jogador();
		jogador7.setIdade(1);
		List<Jogador> jogadores = new ArrayList<Jogador>();
		jogadores.add(jogador1);
		jogadores.add(jogador2);
		jogadores.add(jogador3);
		jogadores.add(jogador4);
		jogadores.add(jogador5);
		jogadores.add(jogador6);
		jogadores.add(jogador7);
		jogo.setJogadores(jogadores);
		jogo.setSentidoDoJogo(Sentido.HORARIO);
		
		jogo.determinaOrdem();
		
		assertEquals(jogador6, jogo.getJogadorAtual());
		assertEquals(jogador7, jogo.getProximoJogador());
	}
	
	public void testDeterminaOrdem_T10() {
		Jogo jogo = new Jogo ();
		Jogador jogador1 = new Jogador();
		jogador1.setIdade(7);
		Jogador jogador2 = new Jogador();
		jogador2.setIdade(6);
		Jogador jogador3 = new Jogador();
		jogador3.setIdade(5);
		Jogador jogador4 = new Jogador();
		jogador4.setIdade(4);
		Jogador jogador5 = new Jogador();
		jogador5.setIdade(1);
		Jogador jogador6 = new Jogador();
		jogador6.setIdade(1);
		Jogador jogador7 = new Jogador();
		jogador7.setIdade(7);
		List<Jogador> jogadores = new ArrayList<Jogador>();
		jogadores.add(jogador1);
		jogadores.add(jogador2);
		jogadores.add(jogador3);
		jogadores.add(jogador4);
		jogadores.add(jogador5);
		jogadores.add(jogador6);
		jogadores.add(jogador7);
		jogo.setJogadores(jogadores);
		jogo.setSentidoDoJogo(Sentido.HORARIO);
		
		jogo.determinaOrdem();
		
		assertEquals(jogador5, jogo.getJogadorAtual());
		assertEquals(jogador6, jogo.getProximoJogador());
	}
	
	public void testNextJogador_T1(){
		Jogo jogo = new Jogo ();
		Jogador jogador1 = new Jogador();
		Jogador jogador2 = new Jogador();
		List<Jogador> jogadores = new ArrayList<Jogador>();
		jogadores.add(jogador1);
		jogadores.add(jogador2);
		jogo.setJogadores(jogadores);
		jogo.setSentidoDoJogo(Sentido.HORARIO);
		
		jogo.setJogadorAtual(jogador1);
		
		jogo.nextJogador();
		
		assertEquals(jogador2, jogo.getJogadorAtual());
		assertEquals(jogador1, jogo.getProximoJogador());
	}
	
	public void testNextJogador_T2(){
		Jogo jogo = new Jogo ();
		Jogador jogador1 = new Jogador();
		Jogador jogador2 = new Jogador();
		List<Jogador> jogadores = new ArrayList<Jogador>();
		jogadores.add(jogador1);
		jogadores.add(jogador2);
		jogo.setJogadores(jogadores);
		jogo.setSentidoDoJogo(Sentido.ANTIHORARIO);
		
		jogo.setJogadorAtual(jogador2);
		
		jogo.nextJogador();
		
		assertEquals(jogador1, jogo.getJogadorAtual());
		assertEquals(jogador2, jogo.getProximoJogador());
	}
	
	public void testNextJogador_T3(){
		Jogo jogo = new Jogo ();
		Jogador jogador1 = new Jogador();
		Jogador jogador2 = new Jogador();
		Jogador jogador3 = new Jogador();
		List<Jogador> jogadores = new ArrayList<Jogador>();
		jogadores.add(jogador1);
		jogadores.add(jogador2);
		jogadores.add(jogador3);
		jogo.setJogadores(jogadores);
		jogo.setSentidoDoJogo(Sentido.ANTIHORARIO);
		
		jogo.setJogadorAtual(jogador1);
		
		jogo.nextJogador();
		
		assertEquals(jogador3, jogo.getJogadorAtual());
		assertEquals(jogador2, jogo.getProximoJogador());
	}
	
	public void testNextJogador_T4(){
		Jogo jogo = new Jogo ();
		Jogador jogador1 = new Jogador();
		Jogador jogador2 = new Jogador();
		Jogador jogador3 = new Jogador();
		List<Jogador> jogadores = new ArrayList<Jogador>();
		jogadores.add(jogador1);
		jogadores.add(jogador2);
		jogadores.add(jogador3);
		jogo.setJogadores(jogadores);
		jogo.setSentidoDoJogo(Sentido.HORARIO);
		
		jogo.setJogadorAtual(jogador2);
		
		jogo.nextJogador();
		
		assertEquals(jogador3, jogo.getJogadorAtual());
		assertEquals(jogador1, jogo.getProximoJogador());
	}
	
	public void testNextJogador_T5(){
		Jogo jogo = new Jogo ();
		Jogador jogador1 = new Jogador();
		Jogador jogador2 = new Jogador();
		Jogador jogador3 = new Jogador();
		Jogador jogador4 = new Jogador();
		Jogador jogador5 = new Jogador();
		Jogador jogador6 = new Jogador();
		Jogador jogador7 = new Jogador();
		List<Jogador> jogadores = new ArrayList<Jogador>();
		jogadores.add(jogador1);
		jogadores.add(jogador2);
		jogadores.add(jogador3);
		jogadores.add(jogador4);
		jogadores.add(jogador5);
		jogadores.add(jogador6);
		jogadores.add(jogador7);
		jogo.setJogadores(jogadores);
		jogo.setSentidoDoJogo(Sentido.ANTIHORARIO);
		
		jogo.setJogadorAtual(jogador1);
		
		jogo.nextJogador();
		
		assertEquals(jogador7, jogo.getJogadorAtual());
		assertEquals(jogador6, jogo.getProximoJogador());
	}
	
	public void testNextJogador_T6(){
		Jogo jogo = new Jogo ();
		Jogador jogador1 = new Jogador();
		Jogador jogador2 = new Jogador();
		Jogador jogador3 = new Jogador();
		Jogador jogador4 = new Jogador();
		Jogador jogador5 = new Jogador();
		Jogador jogador6 = new Jogador();
		Jogador jogador7 = new Jogador();
		List<Jogador> jogadores = new ArrayList<Jogador>();
		jogadores.add(jogador1);
		jogadores.add(jogador2);
		jogadores.add(jogador3);
		jogadores.add(jogador4);
		jogadores.add(jogador5);
		jogadores.add(jogador6);
		jogadores.add(jogador7);
		jogo.setJogadores(jogadores);
		jogo.setSentidoDoJogo(Sentido.HORARIO);
		
		jogo.setJogadorAtual(jogador2);
		
		jogo.nextJogador();
		
		assertEquals(jogador3, jogo.getJogadorAtual());
		assertEquals(jogador4, jogo.getProximoJogador());
	}
	
	public void testNextJogador_T7(){
		Jogo jogo = new Jogo ();
		Jogador jogador1 = new Jogador();
		Jogador jogador2 = new Jogador();
		Jogador jogador3 = new Jogador();
		Jogador jogador4 = new Jogador();
		Jogador jogador5 = new Jogador();
		Jogador jogador6 = new Jogador();
		Jogador jogador7 = new Jogador();
		List<Jogador> jogadores = new ArrayList<Jogador>();
		jogadores.add(jogador1);
		jogadores.add(jogador2);
		jogadores.add(jogador3);
		jogadores.add(jogador4);
		jogadores.add(jogador5);
		jogadores.add(jogador6);
		jogadores.add(jogador7);
		jogo.setJogadores(jogadores);
		jogo.setSentidoDoJogo(Sentido.HORARIO);
		
		jogo.setJogadorAtual(jogador7);
		
		jogo.nextJogador();
		
		assertEquals(jogador1, jogo.getJogadorAtual());
		assertEquals(jogador2, jogo.getProximoJogador());
	}
	
	public void testNextJogador_T8(){
		Jogo jogo = new Jogo ();
		Jogador jogador1 = new Jogador();
		Jogador jogador2 = new Jogador();
		Jogador jogador3 = new Jogador();
		Jogador jogador4 = new Jogador();
		Jogador jogador5 = new Jogador();
		Jogador jogador6 = new Jogador();
		Jogador jogador7 = new Jogador();
		List<Jogador> jogadores = new ArrayList<Jogador>();
		jogadores.add(jogador1);
		jogadores.add(jogador2);
		jogadores.add(jogador3);
		jogadores.add(jogador4);
		jogadores.add(jogador5);
		jogadores.add(jogador6);
		jogadores.add(jogador7);
		jogo.setJogadores(jogadores);
		jogo.setSentidoDoJogo(Sentido.ANTIHORARIO);
		
		jogo.setJogadorAtual(jogador7);
		
		jogo.nextJogador();
		
		assertEquals(jogador6, jogo.getJogadorAtual());
		assertEquals(jogador5, jogo.getProximoJogador());
	}
	
}